/**
 * Application 主应用程序对象
 */
#ifndef __APPLICATION
#define __APPLICATION

#include "Network.h"
#include "config.h"

typedef struct _Application Application;
#define APPLICATION(any) ((Application *)(any))

extern Application *application_new_from_global(void);

/**
 * @brief 连接到可用的网络对象
 */
extern void application_connect_network(Application *self, Network *net);

/**
 * @brief 处理网络消息的钩子，智能充电桩能处理的数据有：
 * 1.b b_alance={text => float}:           余额重置为 balance
 * 2.m m_ode={f_ast, s_low, a_uto, h_and}: 充电模式调整
 * 3.u u_power={text => float}: 设置的功率上限
 * 4.t order't_imeset={hr:mi}:   设置预约倒计时时间（小时和分钟）
 * 5.w w_illChargeAfterScheduleAttach={1_true, 0_false}:
 *      预约到时后开始或停止充电
 * 6.c per'c_ent={text => float}: 恒压充电的阈值百分比
 * 7.p p_rice={text => float}:    设置当前电价
 *
 * 取下划线前一位字母作 key，value 若为 text，取首字母即可，如：
 * b=55.3,m=f,p=33.0,t=03:22
 */
extern void app_net_handler_cb(Application *app, const uint8_t *data);

/**
 * @brief 应用程序对象的一次流程调用，需要处理：
 * 1. 获取传感器信息
 * 2. 判断当前充电状态
 * 3. 判断充电模式是否执行正确
 */
extern void application_loop_once(Application *self);

#endif
